package com.android.dawinex;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.incross.dawin.DawinConfig;
import com.incross.dawin.util.BKLog;
import com.incross.dawin.views.BKDialog;
import com.incross.dawin.views.DawinAdPlayer;
import com.incross.dawin.views.DawinAdPlayer.OnPlayFinishListener;


public class AdActivity extends Activity {

	private DawinAdPlayer mPlayer;
	private Context mContext;
	private LinearLayout mListArea;
	
	private String mGcd, mMcd, mPcd, mScd, mCcd;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mContext = this;
		setContentView(R.layout.activity_ad);
		
		
		Intent intent = getIntent();
		mMcd = intent.getStringExtra("mcd");
		mPcd = intent.getStringExtra("pcd");
		mGcd = intent.getStringExtra("gcd");
		mCcd = intent.getStringExtra("ccd");
		mScd = intent.getStringExtra("scd");
		
		if(mMcd == null || mPcd == null || mGcd == null || mCcd == null || mScd == null) {
			finishAdWithResult(null);
		}
		
		if(mPcd == null) {
			mPcd = "0";
		}
		
		initView();
		
		// 20141218 수정. 서버타입은 반드시 아래와 같이 설정해 주어야 합니다.
		mPlayer.setDawinServerType(DawinConfig.DAWIN_SERVER_REAL);
		
		// 광고를 호출하면, 송출 서버와 통신 후 지정된 광고를 받아 재생한다. parameter의 값은 null 또는 빈 스트링이 올 수 없다.
		// GCD : Group code, MCD : Media Code, PCD : Page code, SCD : Screen code, CCD : Category Code
		mPlayer.showAd(mGcd, mMcd, mPcd, mScd, mCcd);
	}

	public void initView() {
		mPlayer = (DawinAdPlayer) findViewById(R.id.ad);
		
		// 광고 재생이 종료된 경우 받게될 메세지 리스너 등록
		mPlayer.setOnPlayFinishListener(new OnPlayFinishListener() {
			@Override
			public void onPlayFinished(DawinAdPlayer player, int finishedBy) {
				switch (finishedBy) {
					
					case DawinAdPlayer.AD_FINISH_ACTION_COMPLETE:
						// 광고를 다 봤을 때 호출됩니다. 
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "재생완료 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_ACTION_SKIP:
						// 광고 재생 중 스킵을 클릭한 경우 호출된다.
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "스킵 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_SCREEN_CLICK:
						// 화면 클릭 이벤트가 있는 경우에 한해 화면을 클릭한 경우 호출된다.(AD_FINISH_ACTION_BUTTON_CLICK과 동일하게 동작하지만 액션 구분을 위해 분리함.)
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
						Toast.makeText(mContext, "스크린 클릭 종료", Toast.LENGTH_SHORT).show();
						break;
						
					case DawinAdPlayer.AD_FINISH_ACTION_BUTTON_CLICK:
						// 액션 버튼 이벤트가 있는 경우에 한해 액션 노출된 액션 버튼을 클릭한 경우 호출.
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
						Toast.makeText(mContext, "액션버튼 클릭", Toast.LENGTH_SHORT).show();
						break;
						
					case DawinAdPlayer.AD_FINISH_CALL_ACTION:
						// 다윈 영상 재생중 전화 수신 등 전화와 관련된 동을 할 때 호출된다. (액션에 의한 전화 발신의 경우는 AD_FINISH_ACTION_BUTTON_CLICK 호출, 티커 전화상품으로 인한 전화 발신의 경우는 AD_FINISH_BY_TICKER 호출)
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
						Toast.makeText(mContext, "전화액션 종료", Toast.LENGTH_SHORT).show();
						break;
						
					case DawinAdPlayer.AD_FINISH_NO_APPLICABLE_AD:
						// 요청에 대한 광고가 없는 경우에 호출된다.
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "해당 광고 없음 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_BACK_KEY_PRESSED:
						// Back key를 누른 경우 호출이 되는데, Activity의 onBackPressed가 호출되는 시점에 DawinAdPlayer.onBackPressed()를 호출해야 동작한다.
						// 본 콘텐츠 재생불가(본 메세지 이후에 이전 페이지로 이동 등의 앱 설정을 따름)
						Toast.makeText(mContext, "Back key 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_AFTER_ACTION:
						// 화면 이벤트 또는 액션 버튼에 의해 클릭뷰어가 뜬 경우, 해당 클릭동작에서 화면클릭종료(또는 액션버튼 종료) 메세지를 보내주지만,
						// Activity의 onPause시 DawinAdPlayer.onPause(), onResume시 DawinAdPlayer.onResume()을 호출해 주어야 정상 동작함.
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "액션버튼 동작 후 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_BY_SNS_SHARE:
						// sns share 버튼을 클릭하여 공유 가능한 SNS List에서 최 우측의 링크 복사 및 X 버튼을 제외한 나머지 버튼을 클릭한 경우 호출됨. 이후 공유를 위해 단말 내장 브리우저로 해당 주소로 이동.(앱 이탈)
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
						Toast.makeText(mContext, "Sns share button 종료", Toast.LENGTH_SHORT).show();
						break;
						
					case DawinAdPlayer.AD_FINISH_AFTER_SNS_SHARE:
						// sns share로 인해 앱 이탈 후 복귀
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "Sns 동작 후 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;

					case DawinAdPlayer.AD_FINISH_BY_TICKER:
						// 티커 상품을 클릭하여 티커 상품에 할당된 액션을 실행하기 직전에 호출됨. 티커 전화 발신 상품을 제외하고 티커 해당 페이지 오픈을 위해 단말 내장 브리우저로 해당 주소로 이동.(전화상품 제외하고  앱 이탈)
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
						Toast.makeText(mContext, "티커 종료", Toast.LENGTH_SHORT).show();
						break;

					case DawinAdPlayer.AD_FINISH_AFTER_TICKER:
						// ticker 클릭로 인해 앱 이탈 후 복귀
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "티커 동작 후 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_OTHER_REASON:
						// 위에 나열된 이유 이외에 정상적인 경로로 광고 정보 등을 받았으나, 기타 다른 이유로 Activity를 벗어나는 액션을 취한 경우(또는 슬립모드 진입)등 이상 현상 발생 호출된다.
						// Activity의 onPause시 DawinAdPlayer.onPause(), onResume시 DawinAdPlayer.onResume()을 호출해 주어야 사용 가능
						// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
						// 본 콘텐츠 재생불가(본 메세지 이후에 대부분 현재 페이지 사라지는 이슈 발생함)
						Toast.makeText(mContext, "기타 이유로 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_NETWORK_DISCONNECTED:
						// 광고요청시 네트워크가 끊어진 경우 호출된다.
						// 본 콘텐츠 재생 가능시점!! (다윈 광고를 요청한 시점에 끊어졌을 수도 있으므로 본 콘텐츠 재생요청 가능)
						Toast.makeText(mContext, "Network disconnect.. 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_AD_INFO_RECEIVE_FAIL:
						// 광고정보 수신 실패시 호출. 타임아웃, 파싱 실패 등 다양한 이유로 광고 정보를 제대로 받지 못한 경우 호출.
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "광고정보 수신 실패 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
						
					case DawinAdPlayer.AD_FINISH_OTHER_ERROR:
						// DawinAdPlayer가 알 수 없는 미디어 플레이어 오류 발생, 또는 동작 중 에러 발생등의 비정상적인 상황에서 호출된다.
						// 본 콘텐츠 재생 가능시점!!
						Toast.makeText(mContext, "기타 오류로 종료", Toast.LENGTH_SHORT).show();
						finish();
						break;
				}
			}
		});

		// 미디어 플레이어 자체에서 에러가 나는 경우에 대한 처리를 위한 리스너. MediaPlayer.OnErrorListener 참고.
		mPlayer.setOnErrorListener(new DawinAdPlayer.OnErrorListener() {

			@Override
			public void onError(MediaPlayer arg0, int arg1, int arg2) {
				// TODO : 플레이어 오류상황 처리
				
			}
		});
		mListArea = (LinearLayout) findViewById(R.id.ll_list_area);
		int orient = this.getResources().getConfiguration().orientation;
		if(orient == Configuration.ORIENTATION_LANDSCAPE) {
			mListArea.setVisibility(View.GONE);
		} else {
			mListArea.setVisibility(View.VISIBLE);
		}
	}
	
	private void finishAdWithResult(Intent intent) {
		if(intent != null) {
			setResult(RESULT_OK,intent);
		} else {
			setResult(RESULT_OK);
		}
		
		finish();
	}
	
	@Override
	public void onResume() {
		super.onResume();
		BKLog.e("onResume");
		if(mPlayer != null) {
			mPlayer.onResume();
		}
	}
	
	@Override
	public void onPause() {
		super.onPause();
		BKLog.e("onPause");
		if(mPlayer != null) {
			mPlayer.onPause();
		}
	}
	
	@Override
	public void onDestroy() {
		if(mPlayer != null) {
			mPlayer.onDestroy();
		}
		super.onDestroy();
	}
	
	@Override
	public void onBackPressed() {
		mPlayer.onBackPressed();
		super.onBackPressed();
	}


	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if(resultCode == RESULT_OK && requestCode == BKDialog.ACTION_CLICKVIEWER) {
			Toast.makeText(this, "클릭뷰어 후 광고종료", Toast.LENGTH_SHORT).show();
			finish();
			
		}


	}
	
	@Override
	public void onConfigurationChanged (Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
			mListArea.setVisibility(View.GONE);
		} else {
			mListArea.setVisibility(View.VISIBLE);
		}
	}


}
